<?php
class Evento extends Zend_Db_Table_Abstract
{
    protected $_name = 'evento';
    protected $_primary = 'id_evento';

    public function __construct(){
    	parent::__construct();
    	$this->id_evento			=null;
    	$this->nm_evento=null;
    	$this->dt_inicial=null;
    	$this->dt_termino=null;
    	$this->ds_evento=null;
    	$this->id_local=null;
		$this->dt_inicio_inscricao	= null;
		$this->dt_limite_inscricao	= null;
    }

	public function load($id){
    	$row = $this->find($id)->current();
    	$this->id_evento 			= $row["id_evento"];
    	$this->id_local 			= $row["id_local"];
		$this->dt_inicial 			= UtilController::usDateBrDate($row["dt_inicial"]);
		$this->dt_termino 			= UtilController::usDateBrDate($row["dt_termino"]);
		$this->nm_evento 			= $row["nm_evento"];
		$this->ds_evento 			= $row["ds_evento"];
		$this->dt_inicio_inscricao	= UtilController::usDateBrDate($row['dt_inicio_inscricao']);
		$this->dt_limite_inscricao	= UtilController::usDateBrDate($row['dt_limite_inscricao']);
    }

    public function validate($transacao){
    	$mensagem = new AlertaErro();
    	$erro = null;
    	
    	if ($transacao=='insert'){
    		if (count(Evento::buscar(null, null, $this->id_local, $this->dt_inicial, $this->dt_termino))>0){
        		$erro=$mensagem->getMessage(2); //Local não disponivel para a data
    		}
    	} 
    	if (strtotime($this->dt_inicio_inscricao)>strtotime($this->dt_limite_inscricao)){
        	$erro=$mensagem->getMessage(1); //Data inscrição inválida
        }elseif (strtotime($this->dt_inicial)>strtotime($this->dt_termino)){
        	$erro=$mensagem->getMessage(3); //Data de realização do evento inválida
        }elseif (strtotime($this->dt_inicio_inscricao)>strtotime($this->dt_termino)){
        	$erro=$mensagem->getMessage(4); //Data de realização do evento não compativel com a data da inscrição
        }elseif (is_null($this->id_local) || is_null($this->dt_inicial) || is_null($this->dt_termino) || is_null($this->nm_evento) || is_null($this->ds_evento)) {
        	$erro=$mensagem->getMessage(5); //Campos de preenchimento obrigatório.
        }else{//Cadastro realizado com sucesso!
        	$erro=$mensagem->getMessage(6);
        }        
    	return $erro; 	
    }
    
    public function salvar(){
    	$dados = array('id_evento'			=>$this->id_evento,
				 	   'id_local'			=>$this->id_local,
					   'dt_inicial'			=>$this->dt_inicial,
					   'dt_termino' 		=>$this->dt_termino,
					   'nm_evento'			=>$this->nm_evento,
    				   'ds_evento'			=>$this->ds_evento,
    				   'dt_inicio_inscricao'=>$this->dt_inicio_inscricao,
    	               'dt_limite_inscricao'=>$this->dt_limite_inscricao);

    	if ($this->id_evento == null){
			$this->id_evento = $this->insert($dados);
    	}
    	else {
    		$where = "id_evento = " . $this->id_evento;
			$this->update($dados, $where);
    	}
		return $this->id_evento;
    }

    public function buscar($id_evento, $nm_evento, $id_local, $dt_inicial, $dt_termino, $order=1, $asc=1, $validos=0){
    	/* $validos==0 - Busca todos os eventos $validos==1 - Busca todos os eventos com data inicial superior a atual*/
    	$db  = Zend_Registry::get('db');
    	$sql = 'select nm_evento,
    				   concat(ds_local, " (", ds_cidade,"-", ds_sigla, ")") local,
    				   date_format(dt_inicial, "%d/%m/%Y") dt_inicial,
    				   date_format(dt_termino, "%d/%m/%Y") dt_termino,
    				   ds_local,
    				   e.id_local,
    				   id_evento id
    			  from evento 		e,
    			  	   local_evento l,
    			  	   cidade		c,
    			  	   estado		es
    			 where e.id_local =l.id_local
    			   and l.id_cidade=c.id_cidade
    			   and c.id_estado=es.id_estado
    			   and e.dt_exclusao is null';
    	if ($nm_evento!=NULL){
    		$sql .=' and nm_evento like("%'.$nm_evento.'%")';
    	}
    	if ($id_local>0){
    		$sql.=' and l.id_local='.$id_local;
    	}
    	if ($dt_inicial!=NULL && $dt_termino!=NULL){
    		$sql.=" and (e.dt_inicial between '{$dt_inicial}' and '{$dt_termino}' or 
        				e.dt_termino between '{$dt_inicial}' and '{$dt_termino}')";
    	}
    	
    	if ($validos=='1'){
			$sql.='   and dt_inicial>date_format("'.date('Y-m-d').'", "%Y/%m/%d")
			          and dt_inicio_inscricao<=date_format("'.date('Y-m-d').'", "%Y/%m/%d")
			          and dt_limite_inscricao>=date_format("'.date('Y-m-d').'", "%Y/%m/%d")';
		}
		$orderBy = "asc";
		if($asc == 1){
			$orderBy = "desc";
		}
		$sql .= " order by " . $order . " ".$orderBy;
		$this->qtdReg = count($db->query($sql)->fetchAll());
		return $db->query($sql);
    }

  	public function excluir($id){
    	$where = "id_evento=".$id;
    	$erro = null;
    	try {
    		$this->delete($where);
    	} catch (Exception $e) {
    		if ($e->getCode()=='23000'){ // Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
    			$erro = 'Impossível excluir este evento.';		
    		}
    	} 
    	return $erro;  	
    }    
    
    public function eventoStatus(){
    	//Retorno: 1- Único evento válido; 2 - Possui mais de um evento; 3 - Não possui evento cadastrado
		$ret = 3;
    	$where = 'dt_inicial>date_format("'.date('Y-m-d').'", "%Y/%m/%d")
			      and in_liberado=1
			      and dt_exclusao is null
			      and dt_inicio_inscricao<=date_format("'.date('Y-m-d').'", "%Y/%m/%d")
			      and dt_limite_inscricao>=date_format("'.date('Y-m-d').'", "%Y/%m/%d")';    	
    	$rowset   = $this->fetchAll($where);
    	$rowCount = count($rowset);
 		if ($rowCount == 1) {
		    $row  = $rowset->current();
		    $this->load($row["id_evento"]);
			$ret=1;
 		}elseif ($rowCount>1){
    		$ret=2;
    	}
    	return $ret;   	
    }
}